package com.jy.adscm.zltx.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.jy.adscm.bean.system.JyUser;
import com.jy.adscm.exception.AdscmSystemException;
import com.jy.adscm.security.utils.Token;
import com.jy.adscm.system.mapper.mysql.JyUserMapper;
import com.jy.adscm.zltx.bean.*;
import com.jy.adscm.zltx.mapper.mysql.*;
import com.jy.adscm.zltx.service.SjFileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zyl
 * @since 2018-11-08
 */
@Service
public class SjFileServiceImpl extends ServiceImpl<SjFileMapper, SjFile> implements SjFileService {
   @Autowired
    JyZltxListTreeMapper JyZltxListTreeMapper;
   @Autowired
    SjFileVersionRecordMapper sjFileVersionRecordMapper;
   @Autowired
    JyUserMapper jyUserMapper;
   @Autowired
    SjFileDeptMapper SjFileDeptMapper;
   @Autowired
    SjFileUserMapper sjFileUserMapper;
    @Override
    public boolean insertSjFile(SjFile sjFile, String treeId) throws AdscmSystemException {
        boolean insert = super.insert(sjFile);
//        JyZltxListTree jyZltxListTree = JyZltxListTreeMapper.selectById(treeId);
//        if (jyZltxListTree!=null){
//            jyZltxListTree.setLinkFileId(sjFile.getFileId());
//            JyZltxListTreeMapper.updateById(jyZltxListTree);
//        }else {
//            throw    new AdscmSystemException("拿到的treeId没找到对应的树");
//        }

        return false;
    }

    @Override
    public boolean updateSjFile(SjFile sjFile) throws AdscmSystemException {
        //说明是第一次发布
        boolean b=false;
        //版本发布
        if ( "1".equals(sjFile.getIsApproval()) ){
            if (sjFile.getUpdateTimes()==null||sjFile.getUpdateTimes()==0){
                sjFile.setUpdateTimes(0);
            }
            sjFile.setIsLocked(1);
            b = super.updateById(sjFile);
            // 生成新版本
             SjFileVersionRecord sjFileVersionRecord=new SjFileVersionRecord();
            sjFileVersionRecord.setFileCode(sjFile.getFileCode());
            sjFileVersionRecord.setFileContent(sjFile.getInitialContent());
            sjFileVersionRecord.setFileId(sjFile.getFileId());
            sjFileVersionRecord.setIssuer(sjFile.getFileApprover());
            sjFileVersionRecord.setIssueTime(new Date());
            sjFileVersionRecord.setVersionCode(sjFile.getVersionCode());
            sjFileVersionRecordMapper.insert(sjFileVersionRecord);
            }

        else {
            b=   super.updateById(sjFile);
        }
        return b;
    }

    @Override
    public List<SjFile> selectByFileId(String fileGs, String fileType,Token token) throws AdscmSystemException {
        Wrapper<SjFile> wrapper =new EntityWrapper<>();
        wrapper.eq("fileGs",fileGs );
        wrapper.eq("fileType",fileType);
        wrapper.setSqlSelect("fileId","fileName","fileCode", "createTime", "lastUpdateTime", "versionCode", "updateTimes",
                "approvalTime", "fileApprover", "fileWriter", "fileGs", "isApproval", "fileType", "isLocked");
        List<SjFile> sjFiles = super.selectList(wrapper);
        List<SjFile> result =new ArrayList<>();
        Integer userId = token.getUser().getId();
        //过滤
        for (SjFile sjFile : sjFiles) {
            Wrapper<SjFileUser> sjFileUserWrapper=new EntityWrapper<>();
            sjFileUserWrapper.eq("fileId",sjFile.getFileId());
            sjFileUserWrapper.eq("userId",userId);
            List<SjFileUser> sjFileUsers = sjFileUserMapper.selectList(sjFileUserWrapper);
            if (sjFileUsers!=null&&sjFileUsers.size()>0){
                result.add(sjFile);
            }
        }
        for (SjFile sjFile : result) {
              if (sjFile.getFileWriter()!=null&& !"".equals(sjFile.getFileWriter())){
                  JyUser jyUser = jyUserMapper.selectById(sjFile.getFileWriter());
                  sjFile.setFileWriterName(jyUser.getName());
              }
              if (sjFile.getFileApprover()!=null&& !"".equals(sjFile.getFileApprover())){
                  JyUser jyUser = jyUserMapper.selectById(sjFile.getFileApprover());
                  sjFile.setFileApproverName(jyUser.getName());
              }
              List<Integer> ids= new ArrayList<>();
            Wrapper<  SjFileDept> wrapper1 =new EntityWrapper<>();
            wrapper1.eq("fileId",sjFile.getFileId());
            final List<SjFileDept> sjFileDepts = SjFileDeptMapper.selectList(wrapper1);
            for (SjFileDept sjFileDept : sjFileDepts) {
                ids.add(sjFileDept.getDeptId());
            }
            sjFile.setFileUseScope(ids);
        }
        return result;
    }
}
